/*
 * 文件名：OrderInfoDao.java
 * 版权：Copyright by www.huawei.com
 * 描述：
 * 修改人：zhangshaohua
 * 修改时间：2016年4月25日
 * 跟踪单号：
 * 修改单号：
 * 修改内容：
 */

package com.zcsy.manage.persistence.mall;

import java.util.List;
import java.util.Map;

import com.zcsy.manage.model.mall.GoodsInfo;
import com.zcsy.manage.model.mall.OrderInfo;
import com.zcsy.manage.model.mall.OrderMoney;
import com.zcsy.manage.model.mall.ShoppingCart;
import com.zcsy.manage.model.system.User;

/**
 * 
 * @Title: OrderInfoDao.java
 * @Package： com.zcsy.manage.persistence.mall 
 * @Description: 订单持久层
 * @author zhangsh zsh3384027@gmail.com
 * @Copyright: 2016 武汉恒数利通技术有限公司 All rights reserved.
 * @date 2016年4月25日
 * @version 1.0
 * @see JDK1.8.0_45
 * @since
 */
public interface OrderInfoDao {
	
	/**
	 * 
	* @Title: selectOrderSender1 
	* @Description: 查询最近7天的配送员的订单配送数量 
	* @param map 
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月15日 
	* @throws
	 */
	List<Map<String, Object>> selectOrderSender1(Map<String, Object> map);
	
	/**
	 * 
	* @Title: selectByDate1 
	* @Description: 查询最近7天的配送数量 
	* @param map
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月15日 
	* @throws
	 */
	List<Map<String, Object>> selectByDate1(Map<String, Object> map);
	
	/**
	 * 
	* @Title: selectOrder2 
	* @Description: 根据条件查询已配送的订单  
	* @param map
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月15日 
	* @throws
	 */
	List<Map<String, Object>> selectOrder2(Map<String, Object> map);
	
	/**
	 * 
	* @Title: selectOrder0 
	* @Description: 根据条件查询订单  
	* @param map
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月14日 
	* @throws
	 */
	List<Map<String, Object>> selectOrder0(Map<String, Object> map);
	/**
	 * 
	* @Title: selectOrder1 
	* @Description: 根据条件查询还未配送的订单 
	* @param map
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月14日 
	* @throws
	 */
	List<Map<String, Object>> selectOrder1(Map<String, Object> map);
	
	/**
	 * 
	* @Title: selectByOrderId 
	* @Description: 通过订单id查询小区id 
	* @param list 小区id
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月13日 
	* @throws
	 */
	List<String> selectByOrderId(List<String> list);
	
	/**
	 * 
	* @Title: selectMonth 
	* @Description: 本月已配送 
	* @param list 权限所在的小区
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月12日 
	* @throws
	 */
	int selectMonth(List<String> list);
	
	/**
	 * 
	* @Title: selectWeek 
	* @Description: 本周已配送 
	* @param map
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月12日 
	* @throws
	 */
	int selectWeek(Map map);
	
	/**
	 * 
	* @Title: selectPeiSong 
	* @Description:  今日已配送
	* @param loginname
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月12日 
	* @throws
	 */
	int selectPeiSong(String loginname);
	
	/**
	 * 
	* @Title: selectToday 
	* @Description: 今日新增订单 
	* @param list
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月12日 
	* @throws
	 */
	int selectToday(List<String> list);
	
	/**
	 * 
	* @Title: selectOrderInfo 
	* @Description: 查询订单列表 
	* @param map
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月6日 
	* @throws
	 */
	List<Map<String, Object>> selectOrderInfo(Map<String, Object> map);
	
	/**
	 * 
	* @Title: selectByDate 
	* @Description: 日期报表 （非最近7天）
	* @param map
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月1日 
	* @throws
	 */
	List<Map<String, Object>> selectByDate(Map<String, Object> map);
	
	/**
	 * 
	* @Title: assignOrder 
	* @Description: 指派/抢单接
	* @param orderInfo 订单信息
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年5月30日 
	* @throws
	 */
	int assignOrder(OrderInfo orderInfo);
	
	/**
	 * 
	* @Title: selectOrderEmployee 
	* @Description: 配送员在某段时间内的配送数量 （非最近7天）
	* @param map
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年5月25日 
	* @throws
	 */
	List<Map<String, Object>> selectOrderSender(Map<String,Object> map);

	
	/**
	 * 
	* @Title: updateState 
	* @Description:修改订单状态 
	* @param  oInfo	  
	* @return int    
	* @throws
	 */
	int updateState(OrderInfo oInfo);
	
	/**
	 * 
	* @Title: selectByOrderNumber 
	* @Description: 订单号查询订单信息 
	* @param ordernumber 订单编号	   
	* @return int    
	* @throws
	 */
	OrderInfo selectByOrderNumber(String ordernumber);

	/**
	 *
	* @Title: selectOrder 
	* @Description:   根据输入条件查询订单  
	* @param orderInfo 
	* @return 
	* @author wangj 1157360454@qq.com   
	* @date 2016年5月26日 
	* @throws
	 */
	
	List<OrderInfo> selectOrder(Map<String, Object> orderInfo);
	/**
	 * 
	 * @Description 生成订单
	 * @param orderInfo
	 * @return 1:成功 0：失败
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	int insert(OrderInfo orderInfo);
	
	/**
	 * 
	 * @Description 修改订单
	 * @param orderInf
	 * @return 1:成功 0：失败
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	int update(OrderInfo orderInf);
	
	int updateByParentOrder(OrderInfo orderInf);
	
	/**
	 * 
	 * @Description 根据id获取订单信息
	 * @param id
	 * @return 
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	OrderInfo selectOrderByPrimaryKey(String id);
	
	/**
	 * 
	 * @Description 根据id删除订单信息
	 * @param id
	 * @return 1:成功 0：失败
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	int deleteByPrimaryKey(String id);
	
	/**
	 * @Description 根据关键信息获取订单列表
	 * @param orderInf
	 * @return 
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	List<OrderInfo> selectByKeyword(OrderInfo orderInf);
	
	/**
	 * @Description:根据关键信息，查询商户订单（只含type为1的正常订单）
	 * @author huangls 1449700087@qq.com
	 * @date 2016年8月26日
	 */
	List<OrderInfo> selectSellerOrderListByKeyword(OrderInfo keyword);
	
	/**
	 * @Description 修改订单状态<br>
	 *  @param Map---- 
     *            --id:订单Id
     *            --state:订单状态 
	 * 
	 * @return 操作结果
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月25日
	 * @see 
	 */
	int updateOrderStateByMap(Map map);
	
	/**
	 * @Description 根据订单状态和派发人账号查询订单
	 * @param orderInfo 插入数据的订单对象
	 * @return 查询的订单列表
	 * @author liuying 1075817474@qq.com
	 * @date 2016年6月17日
	 * @see 
	 */
	List<OrderInfo> selectByStateAndSenderAccount(Map<String, Object> params);
	
	/**
	 * @Description 根据用户登录名和状态查询订单<br>
	 * 
	 * @param map state:订单状态
	 *            userAccount:用户登录名
	 * @return 返回用户各状态订单列表
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年7月10日
	 * @see 
	 */
	List<OrderInfo> selectByStateAndUserAccount(Map map);
	
	List<OrderInfo> selectOrderInfoAll(Map map);
	
	/**
	 * @Description:获取当前小区的全部订单
	 * @param map cellId: 小区id
	 *            userAccount:用户登录名
	 * @return 
	 * @author huangls 1449700087@qq.com
	 * @date 2016年8月3日
	 */
	List<OrderInfo> selectOrderInfoMyCurrentCell(Map map);
	
	/**
	 * @Description:获取不同状态下当前小区的全部订单
	 * @param map cellId: 小区id
	 *            userAccount:用户登录名
	 *            states:订单状态字符串
	 * @return 
	 * @author huangls 1449700087@qq.com
	 * @date 2016年8月4日
	 */
	List<OrderInfo> selectOrderInfoByCellIdStateUserAccount(Map map);
	
	/**
	 * @Description:根据主键查询订单信息，及订单下的订单详情信息，商品信息
	 * @param id 主键Id
	 * @return 
	 * @author huangls 1449700087@qq.com
	 * @date 2016年8月4日
	 */
	OrderInfo selectOrderInfoAllById(String id);

    /**
     * 
     * @Description <br>
     * 计算订单价格方法
     * @param detailList 购物车记录列表
     * @param member 会员信息
     * @return 订单金额对象
     * @author caiyinli 13277030520@163.com
     * @date 2016年7月15日
     * @see
     */
    OrderMoney setOrderCost(List<ShoppingCart> detailList,User user);
	
    /**
     * @Method: getShopOrderSum
     * @Description 查询首页订单数量汇总
     * @param map
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月19日
     * @see 
     */
    Integer getShopOrderSum(Map<String, Object> map);
    
    /**
     * @Method: selectByShopIdAndState
     * @Description 根据店铺id和订单状态查询订单
     * @param map  String shopId店铺id，
     *             Integer state订单状态）
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月25日
     * @see 
     */
    List<OrderInfo> selectByShopIdAndState(Map<String, Object> map);
    
    /**
     * @Description:根据店铺id和订单状态字符串查询订单
     * @param map String shopId店铺id，
     *             String states订单状态
     * @author huangls 1449700087@qq.com
     * @date 2016年8月26日
     */
    List<OrderInfo> selectOrderListByShopIdStates(Map<String, Object> map);
    
    /**
     * @Method: selectAfterSaleByShopId
     * @Description 查找店铺里售后的订单
     * @param shopId
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月26日
     * @see 
     */
    List<OrderInfo> selectAfterSaleByShopId(String shopId);

    /**
     * @Method: selectByPrimaryId
     * @Description 根据订单id查询订单
     * @param id
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月27日
     * @see 
     */
    OrderInfo selectByPrimaryId(String id);
    
    /**
    * @Method: getOrderAndGoodsInfo
    * @Description 根据关键字查询所需记录
    * @param orderInfo
    * @return List<OrderInfo>
    * @author yangfan 373188993@qq.com
    * @date 2016年7月27日
    * @see 
    */
    List<OrderInfo> getOrderAndGoodsInfo(OrderInfo orderInfo);
    
    List<OrderInfo> getOrderByKeyWords(OrderInfo orderInfo);
    
    /**
     * @Description:仅仅查询订单列表
     * @param map cellId: 小区id
	 *            userAccount:用户登录名
	 *            states:订单状态字符串
     * @return 订单列表
     * @author huangls 1449700087@qq.com
     * @date 2016年8月10日
     */
    List<OrderInfo> selectOrderInfoList(Map map);
    
    List<OrderInfo> selectAllOrderInfoList(Map map);
    
    List<OrderInfo> selectOrderByParentId(String parentId);
    
    List<OrderInfo> selectByKeywordCommand(OrderInfo orderInfo);
    
    /**
     * 
     * @Description 取出近90天所有已完成订单<br>
     * @param shopId 店铺id
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月24日
     */
    List<OrderInfo> selectCompletedOrder(String shopId);
    
    /**
     * 
     * @Description 取出近90天所有已取消订单<br>
     * @param shopId 店铺id
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月24日
     */
    List<OrderInfo> selectCanceledOrder(String shopId);
    
    /**
     * 
     * @Description 根据选择的时间取出所有已完成订单<br>
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月26日
     */
    List<OrderInfo> searchCompletedOrderByTime(Map map);
    
    /**
     * 
     * @Description 根据选择的时间取出所有已取消订单<br>
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月26日
     */
    List<OrderInfo> searchCanceledOrderByTime(Map map);

    /**
     * 
     * @Description 获取每月已完成订单数<br>
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月26日
     */
    List<OrderInfo> searchCompletedOrderByMonth(Map map);
    
    /**
     * 
     * @Description 获取每月已取消订单数<br>
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月26日
     */
    List<OrderInfo> searchCanceledOrderByMonth(Map map);
    
    /**
     * @Description:批量更新订单状态，将待商家确认改为退款申请，用于定时器
     * @author huangls 1449700087@qq.com
     * @date 2016年8月29日
     */
    int updateStateBeRefundAll();
    
    /**
     * @Description:批量更新订单状态，将配送已送达改为确认收货，用于定时器
     * @author huangls 1449700087@qq.com
     * @date 2016年8月29日
     */
    int updateStateBeenSenddAll();
    
}
